/* IF2030 - Algorirma dan Struktur Data */
/* Kelas/Kelompok/Tahun  : 03/09/2011 */
/* Tanggal   : 2 Desember 2011 */
/* File      : tanggal.c */
/* Deskripsi : Tipe bentukan tanggal */

#ifndef tanggal_h
#define tanggal_h
#include "../boolean/boolean.h"
#include "../string/string.h"

typedef struct {
    int DD;
    int MM;
    int YY;
} date;

#define Day(T) T.DD
#define Month(T) T.MM
#define Year(T) T.YY

date MakeDate(int x, int y, int z);
// Membentuk Date dari tanggal x, bulan y, dan tahun z
boolean IsKabisat(date D);
// Mengeluarkan nilai true apabila tahun tersebut kabisat
// yaitu tahun habis dibagi 4 dan tidak habis dibagi 100, atau habis dibagi 400
boolean IsLess(date D1, date D2);
// Mengeluarkan nilai true apabila date D1 lebih kecil dari D2
boolean IsSame(date D1, date D2);
// Mengeluarkan nilai true apabila date D1 sama dengan D2
boolean IsSameDM(date D1, date D2);
// Mengeluarkan nilai true apabila DD dan MM dari D1 sama dengan D2
date NextDay(date D);
// Mengeluarkan tanggal setelah tanggal D
boolean IsDateValid(date D);
// Mengeluarkan nilai true apabila data yang dimasukkan salah
date StrToDate (string str);
// Menghasilkan Date dari string
void DateToStr (date D, string str);
// Menghasilkan Date dari string
// I.S date D terdefinisi
// F.S str berisi date
void printDate(date dt);
// I.S. sembarang
// F.S. dioutput tanggal ke layar
date NOW();
// Menghasilkan tanggal hari ini
#endif
